package com.errol.sync.sync.pojo;

import lombok.Data;

import java.lang.reflect.Method;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * @author zhang xiao bin
 * @version v1.0
 * @date 2021/07/05
 * @since v
 **/
@Data
public class EntityInfo<E> {

    /**
     * 实体类对象
     */
    private Class<E> entityClass;
    /**
     * 表名
     */
    private String tableName;
    /**
     * 属性和表字段信息
     */
    private List<FieldInfo> fieldInfos;
    /**
     * 逻辑删除字段
     */
    private String logicDeleteField;
    /**
     * 从源表查询使用，添加额外的查询参数，不要加 where
     */
    private String additionalWhereClause = null;
    /**
     * 是否在同步中
     */
    private final AtomicBoolean inSync = new AtomicBoolean(false);

    @Data
    public static class FieldInfo {

        /**
         * 属性名
         */
        private String propertyName;
        /**
         * 表字段名
         */
        private String fieldName;
        /**
         * 对应setter
         */
        private Method setter;
        /**
         * 源数据表中的字段名，从源表查询使用，自动替换为当前库中的名称
         */
        private String fieldNameInSourceDatabase = null;
        /**
         * 从源表查询使用，为 true 时不会拼接到 select 子句
         */
        private boolean notExistInSourceDatabase = false;
    }
}
